@group(0) @binding(0) var<storage, read_write> a_u32 : atomic<u32>;

@group(0) @binding(1) var<storage, read_write> a_i32 : atomic<i32>;

var<workgroup> b_u32 : atomic<u32>;

var<workgroup> b_i32 : atomic<i32>;

@compute @workgroup_size(16)
fn main() {
  {
    var value = 42u;
    let r1 = atomicCompareExchangeWeak(&(a_u32), 0u, value);
    let r2 = atomicCompareExchangeWeak(&(a_u32), 0u, value);
    let r3 = atomicCompareExchangeWeak(&(a_u32), 0u, value);
  }
  {
    var value = 42;
    let r1 = atomicCompareExchangeWeak(&(a_i32), 0, value);
    let r2 = atomicCompareExchangeWeak(&(a_i32), 0, value);
    let r3 = atomicCompareExchangeWeak(&(a_i32), 0, value);
  }
  {
    var value = 42u;
    let r1 = atomicCompareExchangeWeak(&(b_u32), 0u, value);
    let r2 = atomicCompareExchangeWeak(&(b_u32), 0u, value);
    let r3 = atomicCompareExchangeWeak(&(b_u32), 0u, value);
  }
  {
    var value = 42;
    let r1 = atomicCompareExchangeWeak(&(b_i32), 0, value);
    let r2 = atomicCompareExchangeWeak(&(b_i32), 0, value);
    let r3 = atomicCompareExchangeWeak(&(b_i32), 0, value);
  }
}
